package org.zhadoop.stream.cql.semanticanalyzer.analyzecontext;

import java.util.List;

import org.zhadoop.stream.api.streams.Schema;
import org.zhadoop.stream.cql.exception.SemanticAnalyzerException;
import org.zhadoop.stream.cql.semanticanalyzer.parser.context.ParseContext;

/**
 * 语义分析结果通用接口
 * @author zwd
 *
 */
public abstract class AnalyzeContext {
	/**
	 * 设置语法分析的结果
	 * @param parseContext
	 */
	public abstract void setParseContext(ParseContext parseContext);
	
	/**
	 * 验证语法分析结果是否正确，比如数据类型是否匹配等
	 * @throws SemanticAnalyzerException
	 */
	public abstract void validateParseContext()
				throws SemanticAnalyzerException;
	
	/**
	 * 从解析结果中获取schema信息
	 * 仅限于create stream或者select 这样的语句可以
	 * 其他的类似limit之类就没有schema信息
	 * @return
	 */
	public abstract List<Schema> getCreatedSchemas();
	
	/**
	 * 将解析内容还原为表达式
	  * 使用toString接口是因为guava join的方法需要用到toString方法进行list的拼接
     * 也正是因为这个toString方法，analzyeContext才变成了抽象类，没有使用接口。
	 */
	public abstract String toString();
	
}
